#pragma once
#include "../Headers/types.h"
#include "../Headers/authr.h"
#include "../NS/nameserver.h"
#include "em.rpc.h"

namespace TOB {
	class Email: public AuthRequired {
	public:
		Email(Nameserver::IP nsip, std::string &username, std::string &password);
		~Email();

		/**
		 * 	Получение следующего заголовка
		 *
		 * 	@param letterId ID письма (начиная с 0 для каждого юзера)
		 * 	@param header Содержание заголовка
		 * 	@return Результат операции
		 */
		Code::Type getNextSubject(uint32 letterId, std::string &header);

		/**
		 *	Чтение письма	
		 *	
		 *	@param body Содержание письма
		 *	@return Результат операции
		 */
		Code::Type readLetter(uint32 letterId, std::string &body);

		/**
		 *	Отправка письма
		 *	
		 *	@param header Заголовок письма
		 *	@param body Содержание письма
		 *	@return Результат операции
		 */
		Code::Type sendLetter(std::string &header, std::string &body);

		/**
		 * 	Расширить почтовый ящик
		 *
		 *	@return Результат операции
		 */
		Code::Type expandMail();
   protected:
    bool connected;
    Code::Type code;

   private:
    void applyAuthr(em_authr &authr);
    CLIENT *clnt;
	};
}
